// #include <common/modelcopy/modelcopy.h>
// #include <algorithm>
// #include <boost/describe.hpp>
// #include <boost/mp11.hpp>
// #include <string_view>
//
// namespace reflect
// {
// 	namespace detail
// 	{
//
// 		// 字段拷贝辅助
// 		template<typename From, typename To, typename FromMember, typename ToMember>
// 		inline void try_copy_field(const From& from, To& to, FromMember, ToMember)
// 		{
// 			constexpr bool same_name =
// 					std::string_view(FromMember::name) == std::string_view(ToMember::name);
//
// 			if constexpr (same_name)
// 			{
// 				using FromType = std::decay_t<decltype(from.*FromMember::pointer)>;
// 				using ToType = std::decay_t<decltype(to.*ToMember::pointer)>;
// 				if constexpr (std::is_same_v<FromType, ToType> ||
// 							  std::is_convertible_v<FromType, ToType>)
// 				{
// 					to.*ToMember::pointer = from.*FromMember::pointer;
// 				}
// 			}
// 		}
//
// 		// 单对象拷贝实现
// 		template<typename From, typename To>
// 		To ModelCopierImpl(const From& from, const To& to)
// 		{
// 			To result = to;
// 			using FromDesc = boost::describe::describe_members<From, boost::describe::mod_public>;
// 			using ToDesc = boost::describe::describe_members<To, boost::describe::mod_public>;
//
// 			boost::mp11::mp_for_each<FromDesc>([&](auto from_member) {
// 				boost::mp11::mp_for_each<ToDesc>([&](auto to_member) {
// 					try_copy_field(from, result, from_member, to_member);
// 				});
// 			});
//
// 			return result;
// 		}
//
// 	}// namespace detail
//
// 	// ----------------- ModelCopy 静态方法实现 -----------------
// 	template<typename From, typename To>
// 	To ModelCopy::CopyToModel(const From& from, const To& to)
// 	{
// 		return detail::ModelCopierImpl(from, to);
// 	}
//
// 	template<
// 			template<class...> class SrcContainer,
// 			template<class...> class TgtContainer,
// 			typename A, typename B,
// 			typename AllocA,
// 			typename AllocB>
// 	TgtContainer<B, AllocB>
// 	ModelCopy::CopyToList(const SrcContainer<A, AllocA>& src,
// 						  const TgtContainer<B, AllocB>& tgt)
// 	{
// 		TgtContainer<B, AllocB> out;
// 		out.reserve(std::min(src.size(), tgt.size()));
// 		auto it_src = src.begin();
// 		auto it_tgt = tgt.begin();
// 		for (; it_src != src.end() && it_tgt != tgt.end(); ++it_src, ++it_tgt)
// 		{
// 			out.push_back(CopyToModel(*it_src, *it_tgt));
// 		}
// 		return out;
// 	}
// }// namespace reflect